package one;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtil {
    static Statement statement = null;
	static ResultSet resultSet = null;//返回一个集合
	static Connection connect = null;
	static PreparedStatement prepareStatement = null;
	
	public static Properties propertiesRead() throws IOException {
		/**
		 * IO字节流形式获取properties
		 * 静态，防止修改
		 */
		Properties properties = new Properties();
		File f = new File("");//获取当前目录
		FileReader file = new FileReader(f.getAbsoluteFile()+"/src/one/config.properties");//读取配置文件
		BufferedReader buffer = new BufferedReader(file);//IO字节流对象
		String line = null;
		while((line=buffer.readLine())!=null) {//获取字节流，一直到最后一位。最后一位为空结束
			String [] value = line.split("=");//去掉config.properties的=
			properties.setProperty(value[0], value[1]);//放进Properties对象
		}
		file.close();//关闭流
		return properties;//返回Properties
	}
	
	public static Connection jdbcConnect() throws Exception{
		/**
		 * JDBC通过上面的IO流获取字符进行连接数据库,静态，防止二次注册多次发起连接
		 */
			//加载驱动，mysql为jdbc
			Class.forName((String) propertiesRead().get("driver"));
			//创建mysql的数据库连接
			connect = DriverManager.getConnection(propertiesRead().getProperty("url"),
					propertiesRead().getProperty("username"),propertiesRead().getProperty("password"));
			//创建处理对象,查询使用
		    return connect;
	}
	
	/**
	 * 通用的执行更改方法，递归参数
	 * @param sql
	 * @param parameters
	 * @return
	 * @throws Exception
	 */
	public static String jdbcExecuteUpdate(String sql,Object...parameters) throws Exception {
		//创建预处理对象，增，删，改使用.防sql注入
		Connection connect = jdbcConnect();
		prepareStatement = connect.prepareStatement(sql);
		int low = 0;
		if(parameters.length>0) {
			for(int i=0;i<parameters.length;i++) {
				//遍历获取参数
				prepareStatement.setObject(i+1, parameters[i]);
			}
		}
		low = prepareStatement.executeUpdate();
		jdbcClose();
		return "操作成功！执行的语句条数为"+low+"行！";
	}
	
	/**
	 * 通用的查询方法
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	public static ResultSet jdbcExecuteQuery(String sql) throws Exception {
		Connection connect = jdbcConnect();
		statement = connect.createStatement();
		if(statement!=null) {
			resultSet = statement.executeQuery(sql);
            return resultSet;
		}	
		jdbcClose();
		return null;
	}
	
	
	public static void jdbcClose() throws Exception {
		//关闭数据库连接的资源
		if(statement!=null) {
			statement.close();
			resultSet.close();
		}
		if(prepareStatement!=null){
			prepareStatement.close();
		}
		if(connect!=null) {
			connect.close();
		}
	}
	
	//测试
    public static void main( String[] args ) throws Exception{
//    	String sql1 = "select * from test1";
//    	String sql2 = "insert into test1(id,name,age)value(?,?,?)";
//    	Object[] parameters= {
//    			6,
//    			"测试",
//    			26
//    	};
//    	String message1 = jdbcExecuteUpdate(sql2,parameters);
//    	ResultSet set = jdbcExecuteQuery(sql1);
//    	System.out.print(message1);
//        while(set.next()) {
//        	System.out.print(set.getObject("id"));
//        }
		User user=new User();
		System.out.println();
	    }
}
